Passed
Pull Request — master (#163)
by Alejandro
06:15
created

ImportServersBtn.js ➔ render   A

Complexity

Conditions 1

Size

Total Lines 35
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 32
dl 0
loc 35
ccs 7
cts 7
cp 1
rs 9.112
c 0
b 0
f 0
cc 1
crap 1
1
import React from 'react';
2
import { UncontrolledTooltip } from 'reactstrap';
3
import PropTypes from 'prop-types';
4
5 3
const ImportServersBtn = (serversImporter) => class ImportServersBtn extends React.Component {
6 3
  static defaultProps = {
7
    onImport: () => ({}),
8
  };
9 3
  static propTypes = {
10
    onImport: PropTypes.func,
11
    createServers: PropTypes.func,
12
    fileRef: PropTypes.oneOfType([ PropTypes.object, PropTypes.node ]),
13
  };
14
15
  constructor(props) {
16 3
    super(props);
17 3
    this.fileRef = props.fileRef || React.createRef();
18
  }
19
20
  render() {
21 3
    const { importServersFromFile } = serversImporter;
22 3
    const { onImport, createServers } = this.props;
23 3
    const onChange = ({ target }) =>
24 1
      importServersFromFile(target.files[0])
25
        .then(createServers)
26
        .then(onImport)
27
        .then(() => {
28
          // Reset input after processing file
29 1
          target.value = null;
30
        });
31
32 3
    return (
33
      <React.Fragment>
34
        <button
35
          type="button"
36
          className="btn btn-outline-secondary mr-2"
37
          id="importBtn"
38 1
          onClick={() => this.fileRef.current.click()}
39
        >
40
          Import from file
41
        </button>
42
        <UncontrolledTooltip placement="top" target="importBtn">
43
          You can create servers by importing a CSV file with columns <b>name</b>, <b>apiKey</b> and <b>url</b>
44
        </UncontrolledTooltip>
45
46
        <input
47
          type="file"
48
          accept="text/csv"
49
          className="create-server__csv-select"
50
          ref={this.fileRef}
51
          onChange={onChange}
52
        />
53
      </React.Fragment>
54
    );
55
  }
56
};
57
58
export default ImportServersBtn;
59